home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 015a / qemm6trb.zip / QEMM6TRB.TXT
Text File  |  1991-09-16  |  18KB  |  347 lines

  1. ID:Q6  Trouble-shooting Stealth
  2. Quarterdeck Technical Note #205
  3. by the Quarterdeck Compatibility Dept.
  4.  
  5.                          TROUBLE-SHOOTING STEALTH
  6.  
  7.      This document discusses how to diagnose and cure problems 
  8. occasioned by the use of the Stealth feature of QEMM-386, version 6.  
  9. All users should review the readq.me file that comes with QEMM-386, 
  10. version 6 for additional information.
  11.  
  12. FIRST STEP
  13.      The first step is to ascertain whether Stealth is involved with the 
  14. problem.  Remove the Stealth parameter (ST:M or ST:F) from the QEMM-386 
  15. line of the config.sys.  Reboot the computer and try to duplicate the 
  16. problem.  If the problem still happens then Stealth is not causing the 
  17. problem and you must address the problem by the means explained in the 
  18. troubleshooting section of the QEMM-386 manual.
  19.  
  20. SECTION 1
  21.  
  22.     SECOND STEP
  23.          If Stealth is involved in the problem restore the Stealth 
  24.     parameter (ST:M) and add XST=F000.  Reboot the computer.  If this 
  25.     works, go to the third step;  if this does not work, go to Section 
  26.     Two. On this step the QEMM-386 line of the config.sys should look 
  27.     something like: 
  28.  
  29.           device=c:\qemm\qemm386.sys ram st:m xst=f000
  30.  
  31.     THIRD STEP
  32.          If XST=F000 solves your problem replace it with X=F000-FFFF, 
  33.     reboot and try again.  The QEMM-386 line of the config.sys should 
  34.     look something like:
  35.  
  36.           device=c:\qemm\qemm386.sys ram st:m x=f000-ffff
  37.  
  38.          If this works, add the parameter FSTC to the qemm line, thusly:
  39.  
  40.           device=c:\qemm\qemm386.sys ram st:m x=f000-ffff fstc
  41.     
  42.     and reboot.  If this works continue;  if this does not work (and 
  43.     FSTC may not work in all circumstances) then remove the FSTC 
  44.     parameter and reboot with the previous QEMM-386 line.  See the 
  45.     section about FSTC below for an explanation of FSTC. 
  46.          In either case, enter Manifest and look at the QEMM- 
  47.     386/Analysis screen.  Look at the last line:  It should look 
  48.     something like this:
  49.  
  50.                     Fn00 IIII IIII IIII IIOO
  51.  
  52.     The portions of the address space with the O in them are being 
  53.     accessed directly.  Some program or piece of hardware is trying to 
  54.     read the contents of the ROM here directly, not merely access them 
  55.     through interrupts.  This portion of the address space must be 
  56.     allowed to be accessed directly.  This is done by excluding QEMM-386 
  57.     from mapping this area.  In this case the target region is FE00-
  58.     FFFF.  The appropriate Exclude is X=FE00-FEFF. The correct QEMM-
  59.     386.SYS line of the config.sys is:
  60.  
  61.          device=c:\qemm\qemm386.sys ram st:m x=fe00-ffff 
  62.     
  63.     This Exclude allows Stealth to do its job and costs you only 8K of 
  64.     high address space.
  65.  
  66.     FOURTH STEP
  67.          If XST=F000 solves your problem while X=F000-FFFF does not then 
  68.     you should try using ST:F instead of ST:M.  You may get more high 
  69.     ram with ST:F than with ST:M XST=F000.  
  70.  
  71. SECTION TWO
  72.  
  73.      This section is only for users with video ROM.  Hercules-compatible 
  74. monochrome and CGA systems do not have video ROM and thus this section 
  75. does not apply.  Some machines have their video ROM elsewhere, usually 
  76. E000-E7FF.  Such users should use E000 (or wherever their video ROM 
  77. begins) instead of C000.     
  78.  
  79.     FIFTH STEP
  80.          If XST=F000 does not solve your problem then try XST=C000. The 
  81.     QEMM-386 line of the config.sys should look like: 
  82.  
  83.          device=c:\qemm\qemm386.sys ram st:m xst=c000
  84.     
  85.     If XST=C000 does not work, go to Section Three.  If XST=C000 does 
  86.     work, go to the next step.
  87.  
  88.     SIXTH STEP
  89.          If XST=C000 solves the problem then try placing the page frame 
  90.     at C000.  Do this only if the entire C segment is available to put 
  91.     the page frame in.  The QEMM-386 line of the config.sys should look 
  92.     like:
  93.  
  94.          device=c:\qemm\qemm386.sys ram st:m fr=c000
  95.  
  96.     If this works then this may be acceptable solution.  All the address 
  97.     space in which high ram can be created is being used in this 
  98.     configuration.  If this step does not work or, if you cannot put the 
  99.     page frame at C000, go to the seventh step.
  100.  
  101.     SEVENTH STEP
  102.          If XST=C000 solves the problem but you do not want to (or 
  103.     cannot) put the page frame at C000 then try the parameter 
  104.     FASTINT10:N, where "N" tells QEMM-386 to allow the video ROM's own 
  105.     code to be used.  By default QEMM-386 replaces some of the video 
  106.     ROM's code with its own video code.  This parameter tells QEMM to 
  107.     use the ROM's code.  The QEMM-386 line of the config.sys should look 
  108.     like:
  109.  
  110.          device=c:\qemm\qemm386.sys ram st:m fastint10:n
  111.  
  112.     If this works then all ROMs are being Stealthed.  You may choose to 
  113.     try the eighth step as an alternative though.  If this does not 
  114.     work, go to the next step.  There is a further discussion of 
  115.     FASTINT10 below.
  116.  
  117.     EIGHTH STEP
  118.          If XST=C000 solves the problem but FR=C000 or FASTINT10:N does 
  119.     not (or you cannot put the page frame at C000 or do not want to use 
  120.     FASTINT10:N) then replace XST=C000 with X=C000-C7FF.  The QEMM-386 
  121.     line of the config.sys should look like:
  122.  
  123.          device=c:\qemm\qemm386.sys ram st:m x=c000-c7ff 
  124.  
  125.     If this works, add the parameter FSTC to the QEMM-386 line, thusly:
  126.  
  127.          device=c:\qemm\qemm386.sys ram st:m x=c000-c7ff fstc
  128.     
  129.     and reboot.  If this works continue;  if this does not work (and 
  130.     FSTC may not work in all circumstances) then remove the FSTC 
  131.     parameter and reboot with the previous QEMM-386 line.  See the 
  132.     section about FSTC below for an explanation.
  133.          In either case, enter Manifest, go to the QEMM-386/Analysis 
  134.     screen, and look at the Cn00 line.  It should look something like 
  135.     this:
  136.  
  137.                        Cn00 OIII IIII OOOO OOOO
  138.  
  139.     This indicates that the first 4K region of the C segment, in the 
  140.     video ROM, is being accessed directly.  This portion of the address 
  141.     space must be Excluded when QEMM-386 is Stealthing.  The appropriate 
  142.     QEMM-386 line in the config.sys is:
  143.  
  144.          device=c:\qemm\qemm386.sys ram st:m x=c000-c0ff 
  145.  
  146. SECTION THREE
  147.  
  148.      NINTH STEP
  149.           On some machines there are other ROMs that can be Stealthed; 
  150.     often these are disk ROMs.  The same procedure:  trying XST=??00, 
  151.     then replacing it with the appropriate Exclude of the old kind 
  152.     (X=??00-!!FF) to see if the problem is related to Stealthing or just 
  153.     not having some portion of the ROM's address space directly 
  154.     accessible, can be used.  The trick of making the page frame begin 
  155.     at the beginning of the disk ROM may also work here as well.  If 
  156.     XST=??00 solves your problem, try replacing it with FR=??00, 
  157.     presuming that there is a 64K portion of the address space free 
  158.     beginning at ??00 and that ?? is a multiple of 16.  If some portion 
  159.     of the address space must be Excluded for Stealth to work you should 
  160.     check Analysis with the FSTC and X=??00-!!FF parameters on the QEMM 
  161.     line.
  162.  
  163.     TENTH STEP
  164.           Use XST=F000, XST=C000, XST=??00, and simultaneously for all 
  165.     ROMs being Stealthed.  Then replace the XSTs one by one with the 
  166.     appropriate regular Exclude (X=F000-FFFF, X=C000-C7FF, X=??00-
  167.     !!FF...), look at the QEMM-386/Analysis screen of Manifest and 
  168.     discover what portions of the address space need to be directly 
  169.     available.
  170.  
  171.     ELEVENTH STEP
  172.          If ST:M does not work try ST:F instead.  If ST:F does not work 
  173.     you should try ST:F XST=C000 (and XST=??00) for other Stealthed ROMs 
  174.     other than the one(s) overlain by the page frame.
  175.  
  176.     TWELFTH STEP
  177.          If none of these steps solve the problem please pin down 
  178.     exactly what program is failing (and at what point), and file a 
  179.     report with Quarterdeck.
  180.  
  181. INTERESTING QUESTIONS
  182.  
  183. WHAT IS FASTINT10:N?
  184.      QEMM-386, when Stealthing a video ROM, replaces some of the video 
  185. ROM's code with replacement code written by Quarterdeck.  This 
  186. replacement code is suitable for most video cards.  The FASTINT10:N 
  187. parameter tells QEMM-386 not to use its own replacement code but the 
  188. literal code of the video ROM.  This in no way limits the amount of high 
  189. RAM Stealth creates and may be acceptable solution for those users who 
  190. need it.  It should only be necessary on unusual video cards.  If 
  191. placing the page frame at the beginning of the video card's ROM works or 
  192. if a small regular Exclude also solves the problem you may choose to use 
  193. this solution instead.     
  194.  
  195. WHAT IS FSTC?  
  196.      The purpose of the FSTC parameter is to make the Analysis procedure 
  197. accurate.  Some system and video ROMs may not function properly with the 
  198. FSTC parameter.  If this is the case on your system you will have to 
  199. perform the Analysis procedure without the FSTC parameter. However, you 
  200. should be aware in this case that some of the Exclude statements that 
  201. Analysis prompts you to use may not be necessary.  You can try reducing 
  202. these Excludes on a trial-and-error basis if you wish.
  203.      When QEMM-386 Stealths a ROM certain tables may have to be stored 
  204. by QEMM-386 in its own data area.  This uses a few kilobytes of high 
  205. RAM.  When a ROM is being Stealthed but the address in which the ROM 
  206. resides is Excluded (as with X=C000-C7FF) then QEMM-386 cleverly figures 
  207. out that it does not need to make copies of these tables in its own data 
  208. area so it saves this memory by not making copies of the tables.  This 
  209. means that when you do Exclude the portion(s) of the ROM where these 
  210. tables are stored the ROM will be accessed directly though it would not 
  211. be if it were not Excluded.  This will cause Analysis to report that a 
  212. portion of the address space is OK when Excluded even though it would 
  213. not be accessed directly were it not Excluded.
  214.      FSTC (FORCESTEALTHTABLECOPY) forces QEMM-386 to make copies of 
  215. these tables so that inappropriate Excludes are not recommended for the 
  216. above reason.  FSTC should only be used when you are testing a portion 
  217. of a ROMs address space for direct access by Excluding the whole ROM.  
  218. It is not an appropriate parameter for a final configuration.
  219.  
  220. WHAT ARE ADVANCED DISK FEATURES?
  221.      The BIOS has a set of function calls intended for use by 
  222. multitasking programs.  These are Int 15, functions 90 and 91.  The 
  223. system ROM or disk ROM may issue the Int 15, fn 90 call while it is 
  224. waiting for the disk controller to read or write a sector, allowing 
  225. other programs to execute during this wait.  When the sector is 
  226. ready, the disk interrupt handler issues an Int 15, Fn 91, signaling 
  227. the multitasking program that the disk information is ready to be 
  228. processed by the system or disk ROM.  Some disk caches hook this call to 
  229. allow your system to go ahead and execute your current program while the 
  230. system or disk ROM is waiting for its requested sector.  Whereas these 
  231. caches preserve the stack and register state for the BIOS and the 
  232. application when doing this pseudo-multitasking, they do not preserve 
  233. the mapping of the page frame.  Therefore, if the BIOS uses the page 
  234. frame itself (as does Stealth), this could generate conflicts and system 
  235. failures.  Since no known disk cache does the proper page frame 
  236. preservation, QEMM automatically suppresses INT 15, function 90 calls 
  237. from the BIOS, effectively disabling advanced disk features.  Caches 
  238. that save and restore the page frame when using advanced disk features 
  239. can use a programming interface to QEMM-386 to reenable advanced disk 
  240. features.
  241.      You may defeat QEMM-386's defeating of this feature with the 
  242. VIRTUALHDIRQ:N (VHI:N) parameter on the QEMM-386 line of the config.sys. 
  243. If your cache has these "Advanced Features" and does not save and 
  244. restore the page frame you will crash or corrupt data on the cached 
  245. drive(s).
  246.  
  247. WHAT IF I LOAD A DRIVER THAT USES ROM BEFORE QEMM-386?
  248.      If you want to load a device driver before QEMM-386 and it uses a 
  249. ROM then QEMM-386 can still Stealth this ROM if you load the driver 
  250. HOOKROM.SYS before this driver.  Here is an example:
  251.  
  252.      device=c:\qemm\hookrom.sys
  253.      device=c:\????????.sys
  254.      device=c:\qemm\qemm386.sys ram st:m
  255.  
  256. WHY DOES MY SYSTEM SETUP NO LONGER COME UP WITH ST:M?
  257.      On machines with a built-in system setup program in the BIOS ROM 
  258. that can be popped up at any time Stealth may make this feature 
  259. inaccessible after you have booted.  This is because the setup program 
  260. accesses the ROM directly.  In order for it to work after QEMM-386 has 
  261. been loaded you must Exclude the portion of the address space where it 
  262. is stored.  On most machines this is in F000-F7FF or thereabouts.  You 
  263. may decide that it is better to use the system setup only on boot and be 
  264. able to use this portion of the address space for high RAM when you are 
  265. running.  This is the way many systems are these days and you must 
  266. reboot to implement the changes anyway so you may consider this a fair 
  267. trade.
  268.      Machines with a setup program that loads as a regular program may 
  269. not present this problem.
  270.  
  271. WHAT IS GOING ON?
  272.      With ST:M Stealth is moving out of the address space all ROMs 
  273. accessed by means of interrupts (you can see what interrupts are being 
  274. handled by what ROMs in the First Meg/Interrupts screen of Manifest when 
  275. you are not Stealthing.)  When these interrupts are asserted, QEMM-386 
  276. puts the ROM code that services the interrupt into the page frame. With 
  277. ST:F Stealth is allowing the page frame to share the address space used 
  278. by the ROM, making the underlying ROM code available in the page frame 
  279. when an interrupt pointing into the ROM is asserted.
  280.  
  281. HOW CAN IT FAIL?
  282.       The Stealth technology relies on the practice of using the code in 
  283. ROMs only by means of interrupts.  With the exceptions listed below when 
  284. the code in a ROM is accessed directly the program or hardware using 
  285. this code (or information) will find high RAM there instead with ST:M 
  286. and will malfunction.  Although this is not common it does happen.  
  287. Sometimes programs look for identification information:  For video cards 
  288. this usually happens in the bottom 4K; for system BIOSes this usually 
  289. happens in FE00-FEFF.  Most users for whom Stealth fails can recover 
  290. almost all the high RAM Stealth can create with small Excludes of this 
  291. kind.
  292.      Exceptions:
  293.  
  294.     1) QEMM-386 does not map High RAM into the last 64 bytes of the 
  295.     system BIOS ROM because they are commonly accessed directly.  
  296.     Accesses here do not cause Stealth a problem. 
  297.  
  298.     2)  When a ROM accesses itself directly then it should work IF the page
  299.     frame begins at this ROM's beginning address.  There are some video cards
  300.     and disk controllers that fail because the video ROM (disk ROM) does not
  301.     tolerate relocation.  The ready cure for this symptom is to put the page
  302.     frame at C000 (or whatever is the beginning of the appropriate video or
  303.     disk ROM) so that when an interrupt that points into the video ROM (disk
  304.     ROM) is asserted, and QEMM restores the contents of the video ROM (disk
  305.     ROM) into the page frame, the ROM code can access itself where it expects
  306.     to find itself; this is the purpose of step 6 of this method.
  307.  
  308.     3) Direct accesses of one ROM to another work with ST:F.
  309.  
  310. Disk caches that write directly to and read directly from the page frame 
  311. cause Stealth to fail unless the DISKBUFFRAME=?? (DBF=??) is used.
  312.  
  313. Stealth relies on there being interrupts pointing into a ROM in order to 
  314. make it a target for Stealthing.  If there is a ROM in the address space 
  315. that QEMM-386 cannot detect as being used then it will not be Stealthed.  
  316. This may happen for some disk ROMs and for devices that use the ROM only 
  317. upon initialization.  If there is a ROM without an interrupt pointing 
  318. into it it is a suspect for being unused.  You should use the Analysis 
  319. feature of QEMM-386 to discover if this ROM is being used at all.  If it 
  320. is not then the address space it occupies may be reclaimed with an 
  321. INCLUDE.
  322.  
  323. SUMMARY 
  324.      The Stealth technology has been exhaustively tested but the wide 
  325. variety of software and hardware in the PC world has surprises in it for 
  326. every program.  The actual Stealthing of interrupts is very successful.  
  327. The most common failure is due to programs (or other ROMs) trying to 
  328. access a portion of the ROM directly, rather than by means of interrupt. 
  329.  For this to work the target region of this access must be in the 
  330. address space at the time of access. This can be achieved by an 
  331. appropriate exclude of the old kind, usually at a cost of only 4K or 8K 
  332. of the additional high RAM Stealth is creating; see steps 3 through 11 
  333. for a procedure to figure these Excludes out.  If the video ROM or 
  334. adaptor ROM is the target ROM of a problem then placing the page frame 
  335. over the video ROM or adaptor ROM may work; see step 6.  The "Advanced 
  336. disk features" that some disk caches use are incompatible with Stealth. 
  337. QEMM-386 disables these by default whenever possible if Stealth is used. 
  338. Some disk caches write directly to the page frame. Such caches should be 
  339. told to use extended memory or the DISKBUFFRAME=?? (DBF=??) should be 
  340. used with QEMM-386; see step 2.  If you have a problem intractable by 
  341. any of these means Quarterdeck would like to hear about it.
  342.  
  343. This technical note may be copied and distributed freely as long as it 
  344. is distributed in its entirety and it is not distributed for profit.
  345.         Copyright (C) 1991 by Quarterdeck Office Systems
  346.              * * *   E N D   O F   F I L E    * * * 
  347.